package com.itheima.ai.util;

//import ai.springai.document.Document;
//import ai.springai.document.Resource;
//import ai.springai.document.transformer.DefaultDocumentTransformer;
//import ai.springai.document.transformer.DocumentTransformer;
//import ai.springai.document.reader.*;

import org.springframework.ai.document.Document;
import org.springframework.ai.document.DocumentTransformer;
import org.springframework.ai.reader.ExtractedTextFormatter;
import org.springframework.ai.reader.JsonReader;
import org.springframework.ai.reader.TextReader;
import org.springframework.ai.reader.pdf.PagePdfDocumentReader;
import org.springframework.ai.reader.pdf.config.PdfDocumentReaderConfig;
import org.springframework.ai.reader.tika.TikaDocumentReader;
import org.springframework.ai.transformer.splitter.TokenTextSplitter;
import org.springframework.core.io.Resource;

import java.io.IOException;
import java.util.List;

//将各种文件转化为List<Document>
public class LoadDocumentUtil {
//    PagePdfDocumentReader：使用Apache PdfBox读取PDF文件
    public static List<Document> loadPdf(Resource resource) {
        // 创建 PDF 读取器（单页拆分）
        PagePdfDocumentReader reader = new PagePdfDocumentReader(
                resource,
                PdfDocumentReaderConfig.builder()
                        .withPageExtractedTextFormatter(ExtractedTextFormatter.defaults())
                        .withPagesPerDocument(1) // 每页生成一个 Document(按页切分)
                        .build()
        );
        return reader.read();
    }

//    TextReader或TikaDocumentReader：读取txt文件
    public static List<Document> loadText(Resource resource,String charset) {
        // 使用 Tika 读取文本文件（支持指定字符集）
        TikaDocumentReader reader = new TikaDocumentReader(resource);
//        TextReader reader = new TextReader(resource);
        List<Document> documents = reader.get(); //未切分
//        List<Document> documents = reader.read();

        // 手动设置字符集（Tika 可能无法自动检测）
        if (charset != null) {
            documents.forEach(doc -> {
                doc.getMetadata().put("charset", charset);
            });
        }

        DocumentTransformer tokenTextSplitter = new TokenTextSplitter();
        documents = tokenTextSplitter.apply(documents); //已切分
//        documents = tokenTextSplitter.transform(documents);
        return documents;
    }

    // 重载方法：默认使用 UTF-8 编码
    public static List<Document> loadText(Resource resource) {
        return loadText(resource, "UTF-8");
    }

//    JsonReader或TikaDocumentReader：读取JSON格式的文件
    public static List<Document> loadJson(Resource resource) {
        // 使用 Tika 读取 JSON（简单文本提取）
        TikaDocumentReader reader = new TikaDocumentReader(resource);
//        JsonReader reader = new JsonReader(resource);
        List<Document> documents = reader.get(); //未切分
//        List<Document> documents = reader.read();

        DocumentTransformer tokenTextSplitter = new TokenTextSplitter();
        documents = tokenTextSplitter.apply(documents); //已切分
//        documents = tokenTextSplitter.transform(documents);
        return documents;
    }

//    TikaDocumentReader：使用Apache Tika来读取PDF, DOC/DOCX, PPT/PPTX, and HTML等文件
    public static List<Document> loadOther(Resource resource) throws IOException {
        TikaDocumentReader reader = new TikaDocumentReader(resource);
        return reader.read();
    }

    //通用加载器（自动识别文件类型）
    public static List<Document> loadFile(Resource resource) throws IOException {
        String filename = resource.getFilename();
        if (filename == null) {
            throw new IOException("无法获取文件名，无法确定文件类型");
        }

        if (filename.endsWith(".pdf")) {
            return loadPdf(resource);
        } else if (filename.endsWith(".json")) {
            return loadJson(resource);
        } else if (filename.endsWith(".txt") || filename.endsWith(".md")) {
            return loadText(resource);
        } else { // 未知格式使用 Tika 尝试读取
            return loadOther(resource);
        }
    }
}

//    /**
//     * 加载 PDF 文件（整份文档作为单个 Document）
//     * @param resource PDF 资源
//     * @return 合并后的单个 Document
//     */
//    public static List<Document> loadWholeDocument_pdf(@NonNull Resource resource) {
//        // 创建 PDF 读取器（整份合并）
//        SinglePdfDocumentReader reader = new SinglePdfDocumentReader(
//                resource,
//                PdfDocumentReaderConfig.builder()
//                        .withPageExtractedTextFormatter(ExtractedTextFormatter.defaults())
//                        .build()
//        );
//        return reader.read();
//    }
//
//    // ====================== 文本文件加载（TXT/MD 等）=====================
//    /**
//     * 加载文本文件（TXT/MD 等纯文本格式）
//     * @param resource 文本资源
//     * @param charsetName 字符集（默认 UTF-8）
//     * @return 文本内容的 Document
//     */
//    public static List<Document> loadDocument_text(@NonNull Resource resource, String charsetName) {
//        // 创建文本读取器
//        TextDocumentReader reader = new TextDocumentReader(
//                resource,
//                TextDocumentReaderConfig.builder()
//                        .charsetName(charsetName != null ? charsetName : "UTF-8")
//                        .build()
//        );
//        return reader.read();
//    }
//
//    /**
//     * 加载文本文件（默认 UTF-8 编码）
//     * @param resource 文本资源
//     * @return 文本内容的 Document
//     */
//    public static List<Document> loadDocument_text(@NonNull Resource resource) {
//        return loadDocument_text(resource, null);
//    }
//
////    //将md转化
////    public static List<Document> LoadDocument_md(Resource resource) {
////        List<Document> documents = new ArrayList<>();
////        MarkdownDocumentReaderConfig config=MarkdownDocumentReaderConfig.builder()
////                .withHorizontalRuleCreateDocument(true)
////                .withIncludeCodeBlock(true)
////                .withAdditionalMetadata("source","knowledge-base")
////                .build();
////        MarkdownDocumentReader reader=new MarkdownDocumentReader(resource,config);
////        documents.addAll(reader.get());
////        return documents;
////    }
//
//    // ====================== JSON 文件加载 ======================
//    /**
//     * 加载 JSON 文件（自动解析为结构化文档）
//     * @param resource JSON 资源
//     * @return 结构化 Document（含 JSON 节点信息）
//     */
//    public static List<Document> loadDocument_json(@NonNull Resource resource) {
//        // 创建 JSON 读取器
//        JsonDocumentReader reader = new JsonDocumentReader(resource);
//
//        // 可选：添加文档转换（例如格式化 JSON 内容）
//        DocumentTransformer transformer = new DefaultDocumentTransformer();
//        return transformer.transform(reader.read());
//    }
